package activities;

import java.io.IOException;
import java.net.SocketTimeoutException;
import java.util.ArrayList;

import com.androidmodule.onthego.R;

import entidades.CentroComercial;
import entidades.ComercioAdherido;
import extras.Utilities;
import extras.leerPreferencias;
import persistencia.BaseDatos;
import webService.AccesoWebService;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.PreferenceActivity;

public class ActivityPreferenciasGeneralesNested extends PreferenceActivity implements OnSharedPreferenceChangeListener{

	ListPreference listaCentros;
	ListPreference listaComercios;
	BaseDatos db;
	BaseDatos base;
	 @SuppressWarnings("deprecation")
	public void onCreate(Bundle savedInstanceState) {
		 super.onCreate(savedInstanceState);
		 base = new BaseDatos(getApplicationContext());
	     addPreferencesFromResource(com.androidmodule.onthego.R.xml.layout_general_settings_nested);
		 db = new BaseDatos(getApplicationContext());
		 listaCentros = (ListPreference) findPreference("centrosPromosComunes");
	     listaComercios = (ListPreference) findPreference("comerciosPromosComunes");
		 if(leerPreferencias.readActualizacionAutomatica(getApplicationContext())){
		        syncronizarCentrosYComercios(getApplicationContext());
		 }
		 else{
			 // si el hilo no se ejecuta me aseguro de que se habiliten las preferencias
			 listaCentros.setEnabled(true);
    	     listaComercios.setEnabled(true);
		 }
	     listaCentros.setEntries(base.getCentrosComercialesEntries());
	     listaCentros.setEntryValues(base.getCentrosComercialesValues());
	     final String preferenciaCentro =leerPreferencias.readPromoComunCentro(getApplicationContext());
	     if(preferenciaCentro.equals("-1")){
	    	 listaComercios.setEntries(db.getComerciosEntries());
	    	 listaComercios.setEntryValues(db.getComerciosValues());
	     }
	     else{
	    	 listaComercios.setEntries(db.getComerciosEntries(preferenciaCentro));
	    	 listaComercios.setEntryValues(db.getComerciosValues(preferenciaCentro));
	     }
	 }
	
	
	
	@Override
	public void onSharedPreferenceChanged(SharedPreferences arg0, String key) {
		if(key.equals("centrosPromosComunes")){
			 final String preferenciaCentro =leerPreferencias.readPromoComunCentro(getApplicationContext());
		     if(preferenciaCentro.equals("-1")){
		    	 listaComercios.setEntries(db.getComerciosEntries());
		    	 listaComercios.setEntryValues(db.getComerciosEntries());
		     }
		     else{
		    	 listaComercios.setEntries(db.getComerciosEntries(preferenciaCentro));
		    	 listaComercios.setEntryValues(db.getComerciosEntries(preferenciaCentro));
		     }
		}
		
		
	}
	
	@Override
    protected void onResume() {
        super.onResume();

        // Registers a listener whenever a key changes            
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }
  
    @Override
    protected void onPause() {
        super.onPause();
       // Unregisters the listener set in onResume().
       // It's best practice to unregister listeners when your app isn't using them to cut down on 
       // unnecessary system overhead. You do this in onPause().            
       getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);    
    }    
    
    /**
     * Metodo que carga los comercios y centros del pas y estado seleccionado
     */
    public void syncronizarCentrosYComercios(final Context contexto){
    	new AsyncTask<Void, Integer, ArrayList<CentroComercial>>() {
            int codigoError= AccesoWebService.NO_ERROR;

                
            
            protected void onPreExecute(){
            	Utilities.makeToastLong(contexto,contexto.getString(R.string.toast_actualizandoCentros));
            }
            @Override
               
                protected ArrayList<CentroComercial> doInBackground(Void... params) {
                	 ArrayList<CentroComercial> centros= new ArrayList<CentroComercial>();
                	 ArrayList<ComercioAdherido> comercios= new ArrayList<ComercioAdherido>();
                	AccesoWebService webService = new AccesoWebService();
                	
                     try {
                    		Integer idEstado=null;
            				Integer idPais=null;
            				if(leerPreferencias.readFiltroPais(getApplicationContext()).equals("-1")){}
            				else{
            					idPais = Integer.parseInt(leerPreferencias.readFiltroPais(getApplicationContext()));
            				}
            				if(leerPreferencias.readFiltroEstado(getApplicationContext()).equals("-1")){}
            				else{
            					idEstado = Integer.parseInt(leerPreferencias.readFiltroEstado(getApplicationContext()));
            				}
                         centros = webService.getCentrosComercialesParaFiltro(idPais, idEstado);
                         comercios = webService.getComerciosParaFiltro(idPais, idEstado);
                         BaseDatos base = new BaseDatos(contexto);
                         base.insertarCentrosComercialesYComerciso(centros,comercios);
                     }
                     catch(SocketTimeoutException time){
                    	 codigoError=AccesoWebService.TIMEOUT_ERROR;
                     }
                     catch (IOException ex) {
                    	codigoError=22; 
                        ex.printStackTrace();
                     
                     }
                     catch(Exception e){
                    	 codigoError=22; 
	                        e.printStackTrace();
                     }
                     return centros;
                }

                

                protected void onPostExecute(ArrayList<CentroComercial> centros){
                	if(codigoError==AccesoWebService.NO_ERROR){
                		Utilities.makeToastLong(contexto,contexto.getString(R.string.toast_actualicazionCentrosOk));
                		 listaCentros.setEntries(base.getCentrosComercialesEntries());
                	     listaCentros.setEntryValues(base.getCentrosComercialesValues());
                	     final String preferenciaCentro =leerPreferencias.readPromoComunCentro(getApplicationContext());
                	     if(preferenciaCentro.equals("-1")){
                	    	 listaComercios.setEntries(db.getComerciosEntries());
                	    	 listaComercios.setEntryValues(db.getComerciosValues());
                	     }
                	     else{
                	    	 listaComercios.setEntries(db.getComerciosEntries(preferenciaCentro));
                	    	 listaComercios.setEntryValues(db.getComerciosValues(preferenciaCentro));
                	     }
                	     listaCentros.setEnabled(true);
                	     listaComercios.setEnabled(true);
                		
                		
                	}
                	else{
                		Utilities.makeToastLong(contexto,contexto.getString(R.string.toast_actualizacionCentrosError));
                	}
                	
                }
        }.execute();
    }

}
